# LeetCode 538、把二叉搜索树转换为累加树

# 一、题目描述

给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。

# 二、题目解析

# 三、参考代码

// 作者:程序员吴师兄
// 网站:https://www.algomooc.com
class Solution {
 
    // 定义一个变量,用来记录已经访问的所有节点值的总和
    int sum = 0;

    public TreeNode convertBST(TreeNode root) {
        
        // 1、从根节点开始,修改二叉树上的每一个节点的值
        modify(root);

        // 返回修改后的二叉树的根节点
        return root;
    }

    // 按照右根左的顺序,遍历二叉树上的每一个节点,将每个节点的值累加到 sum 上面
    // 同时把 sum 累加到当前节点上
    private void modify(TreeNode node ){

        // 如果当前节点为空,那么就不需要计算了
        if(node == null) return ;

        // 2、去修改当前节点的右子树上面的节点
        // 修改的过程中,会不断的累加当前节点右子树上所有的节点值之和
        modify(node.right);

        // 3、把当前节点右子树上所有的节点值之和在加上当前节点的值更新到 sum 上
        sum += node.val;

        // 4、 修改当前节点的值为 sum
        node.val = sum;

        // 5、去修改当前节点的左子树上面的节点
        // 修改的过程中,会不断的累加当前节点左子树上所有的节点值之和
        modify(node.left);
    }
}